import pandas as pd
import numpy as np
import folium
import json
import seaborn as sns
import matplotlib.pyplot as plt
pd.options.display.max_columns = None
data_anac = pd.read_csv('C:/Users/artur/analiseanac/DadosdoConsumidor.csv', sep=';', skiprows=[0])
data_anac.info()
<class 'pandas.core.frame.DataFrame'> RangeIndex: 49866 entries, 0 to 49865 Data columns (total 38 columns): # Column Non-Null Count Dtype --- ------ -------------- ----- 0 Gestor 49866 non-null object 1 CanalDeOrigem 49866 non-null object 2 Região 49866 non-null object 3 UF 49866 non-null object 4 Cidade 49866 non-null object 5 Sexo 49866 non-null object 6 FaixaEtária 49866 non-null object 7 AnoAbertura 49866 non-null int64 8 MêsAbertura 49866 non-null int64 9 DataAbertura 49866 non-null object 10 HoraAbertura 49866 non-null object 11 DataResposta 44906 non-null object 12 HoraResposta 44906 non-null object 13 DataAnálise 3080 non-null object 14 HoraAnálise 3080 non-null object 15 DataRecusa 3125 non-null object 16 HoraRecusa 3125 non-null object 17 DataFinalização 49866 non-null object 18 HoraFinalização 49866 non-null object 19 PrazoResposta 49866 non-null object 20 PrazoAnaliseGestor 3080 non-null float64 21 TempoResposta 44906 non-null float64 22 NomeFantasia 49866 non-null object 23 SegmentoDeMercado 49866 non-null object 24 Área 49866 non-null object 25 Assunto 49866 non-null object 26 GrupoProblema 49866 non-null object 27 Problema 49866 non-null object 28 ComoComprouContratou 49866 non-null object 29 ProcurouEmpresa 49866 non-null object 30 Respondida 49866 non-null object 31 Situação 49866 non-null object 32 AvaliaçãoReclamação 47529 non-null object 33 NotaDoConsumidor 27142 non-null float64 34 AnáliseDaRecusa 3120 non-null object 35 EdiçãoDeConteúdo 49866 non-null object 36 InteraçãoDoGestor 49866 non-null object 37 CódigoClassificadorANAC 47528 non-null object dtypes: float64(3), int64(2), object(33) memory usage: 14.5+ MB
data_anac.describe()
| AnoAbertura | MêsAbertura | PrazoAnaliseGestor | TempoResposta | NotaDoConsumidor | |
|---|---|---|---|---|---|
| count | 49866.0 | 49866.000000 | 3080.000000 | 44906.000000 | 27142.000000 |
| mean | 2019.0 | 6.665824 | 6.749351 | 5.940409 | 2.697959 |
| std | 0.0 | 3.247377 | 5.079763 | 3.046068 | 1.743213 |
| min | 2019.0 | 1.000000 | 0.000000 | 0.000000 | 1.000000 |
| 25% | 2019.0 | 4.000000 | 2.000000 | 3.000000 | 1.000000 |
| 50% | 2019.0 | 6.000000 | 6.000000 | 6.000000 | 2.000000 |
| 75% | 2019.0 | 10.000000 | 12.000000 | 9.000000 | 5.000000 |
| max | 2019.0 | 12.000000 | 17.000000 | 13.000000 | 5.000000 |
data_anac.head()
| Gestor | CanalDeOrigem | Região | UF | Cidade | Sexo | FaixaEtária | AnoAbertura | MêsAbertura | DataAbertura | HoraAbertura | DataResposta | HoraResposta | DataAnálise | HoraAnálise | DataRecusa | HoraRecusa | DataFinalização | HoraFinalização | PrazoResposta | PrazoAnaliseGestor | TempoResposta | NomeFantasia | SegmentoDeMercado | Área | Assunto | GrupoProblema | Problema | ComoComprouContratou | ProcurouEmpresa | Respondida | Situação | AvaliaçãoReclamação | NotaDoConsumidor | AnáliseDaRecusa | EdiçãoDeConteúdo | InteraçãoDoGestor | CódigoClassificadorANAC | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | Fundação de Proteção e Defesa do Consumidor | Plataforma Web | SE | SP | Barueri | M | entre 31 a 40 anos | 2019 | 1 | 01/01/2019 | 00:46:36 | 08/01/2019 | 17:09:43 | NaN | NaN | NaN | NaN | 10/01/2019 | 22:34:01 | 16/01/2019 | NaN | 7.0 | Latam Airlines (Tam) | Transporte Aéreo | Demais Serviços | Programas de Fidelidade / Benefícios (pontos, ... | Contrato / Oferta | Alteração / rescisão de contrato sem solicitaç... | Internet | S | S | Finalizada avaliada | Não Resolvida | 4.0 | NaN | N | N | 2205 |
| 1 | Fundação de Proteção e Defesa do Consumidor | Plataforma Web | SE | SP | Ribeirão Pires | M | entre 31 a 40 anos | 2019 | 1 | 01/01/2019 | 03:22:30 | 02/01/2019 | 09:41:48 | NaN | NaN | NaN | NaN | 02/01/2019 | 15:58:34 | 16/01/2019 | NaN | 1.0 | Air China | Transporte Aéreo | Transportes | Aéreo | Atendimento / SAC | Falta de atendimento prioritário | Não comprei / contratei | S | S | Finalizada avaliada | Não Resolvida | 3.0 | NaN | N | N | 2225/2315 |
| 2 | Secretaria Nacional do Consumidor | Plataforma Web | NE | RN | Serra Negra do Norte | M | entre 31 a 40 anos | 2019 | 1 | 01/01/2019 | 09:22:46 | 10/01/2019 | 11:05:51 | NaN | NaN | NaN | NaN | 31/01/2019 | 04:03:54 | 16/01/2019 | NaN | 9.0 | Gol Linhas Aéreas | Transporte Aéreo | Transportes | Aéreo | Vício de Qualidade | Negativa de embarque de passageiro (preterição... | Internet | S | S | Finalizada não avaliada | Não Avaliada | NaN | NaN | N | N | 0505 |
| 3 | Instituto Municipal de Proteção e Defesa do Co... | Plataforma Web | SE | RJ | Rio de Janeiro | M | entre 31 a 40 anos | 2019 | 1 | 01/01/2019 | 10:52:15 | 10/01/2019 | 09:00:34 | NaN | NaN | NaN | NaN | 11/01/2019 | 15:47:11 | 16/01/2019 | NaN | 9.0 | Gol Linhas Aéreas | Transporte Aéreo | Transportes | Aéreo | Vício de Qualidade | Negativa de embarque de passageiro (preterição... | Internet | N | S | Finalizada avaliada | Resolvida | 4.0 | NaN | N | N | 3505 |
| 4 | Superintendência de Proteção e Defesa do Consu... | Plataforma Web | CO | GO | Goiânia | F | entre 21 a 30 anos | 2019 | 1 | 01/01/2019 | 11:34:26 | 02/01/2019 | 13:38:23 | NaN | NaN | NaN | NaN | 10/01/2019 | 09:52:35 | 16/01/2019 | NaN | 1.0 | Azul Linhas Aéreas | Transporte Aéreo | Transportes | Aéreo | Cobrança / Contestação | Cobrança indevida / abusiva para alterar ou ca... | Internet | S | S | Finalizada avaliada | Resolvida | 5.0 | NaN | N | N | 1400 |
note: not using df.nunique(), since NaN is not counted as an unique value.
{ col: data_anac[col].unique().size for col in data_anac.columns }
{'Gestor': 17,
'CanalDeOrigem': 3,
'Região': 5,
'UF': 27,
'Cidade': 1703,
'Sexo': 2,
'FaixaEtária': 7,
'AnoAbertura': 1,
'MêsAbertura': 12,
'DataAbertura': 363,
'HoraAbertura': 34121,
'DataResposta': 359,
'HoraResposta': 28243,
'DataAnálise': 286,
'HoraAnálise': 2970,
'DataRecusa': 289,
'HoraRecusa': 2986,
'DataFinalização': 396,
'HoraFinalização': 23940,
'PrazoResposta': 375,
'PrazoAnaliseGestor': 19,
'TempoResposta': 15,
'NomeFantasia': 42,
'SegmentoDeMercado': 1,
'Área': 4,
'Assunto': 8,
'GrupoProblema': 7,
'Problema': 61,
'ComoComprouContratou': 9,
'ProcurouEmpresa': 2,
'Respondida': 2,
'Situação': 4,
'AvaliaçãoReclamação': 4,
'NotaDoConsumidor': 6,
'AnáliseDaRecusa': 4,
'EdiçãoDeConteúdo': 2,
'InteraçãoDoGestor': 2,
'CódigoClassificadorANAC': 12900}
data_anac.isnull().mean().sort_values(ascending=False)
HoraAnálise 0.938234 DataAnálise 0.938234 PrazoAnaliseGestor 0.938234 AnáliseDaRecusa 0.937432 HoraRecusa 0.937332 DataRecusa 0.937332 NotaDoConsumidor 0.455701 HoraResposta 0.099467 TempoResposta 0.099467 DataResposta 0.099467 CódigoClassificadorANAC 0.046886 AvaliaçãoReclamação 0.046866 FaixaEtária 0.000000 MêsAbertura 0.000000 DataAbertura 0.000000 HoraAbertura 0.000000 Sexo 0.000000 Cidade 0.000000 UF 0.000000 Região 0.000000 CanalDeOrigem 0.000000 AnoAbertura 0.000000 HoraFinalização 0.000000 DataFinalização 0.000000 InteraçãoDoGestor 0.000000 PrazoResposta 0.000000 NomeFantasia 0.000000 SegmentoDeMercado 0.000000 Área 0.000000 Assunto 0.000000 GrupoProblema 0.000000 Problema 0.000000 ComoComprouContratou 0.000000 ProcurouEmpresa 0.000000 Respondida 0.000000 Situação 0.000000 EdiçãoDeConteúdo 0.000000 Gestor 0.000000 dtype: float64
data_anac_v1 = data_anac.drop(['HoraAnálise', 'DataAnálise', 'PrazoAnaliseGestor', 'AnáliseDaRecusa', 'HoraRecusa', 'DataRecusa', 'HoraResposta', 'DataResposta', 'CódigoClassificadorANAC', 'DataAbertura',
'HoraAbertura', 'Cidade', 'AnoAbertura', 'HoraFinalização', 'EdiçãoDeConteúdo', 'DataFinalização',
'PrazoResposta', 'SegmentoDeMercado', ], axis = 1)
data_anac_v1.head()
| Gestor | CanalDeOrigem | Região | UF | Sexo | FaixaEtária | MêsAbertura | TempoResposta | NomeFantasia | Área | Assunto | GrupoProblema | Problema | ComoComprouContratou | ProcurouEmpresa | Respondida | Situação | AvaliaçãoReclamação | NotaDoConsumidor | InteraçãoDoGestor | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | Fundação de Proteção e Defesa do Consumidor | Plataforma Web | SE | SP | M | entre 31 a 40 anos | 1 | 7.0 | Latam Airlines (Tam) | Demais Serviços | Programas de Fidelidade / Benefícios (pontos, ... | Contrato / Oferta | Alteração / rescisão de contrato sem solicitaç... | Internet | S | S | Finalizada avaliada | Não Resolvida | 4.0 | N |
| 1 | Fundação de Proteção e Defesa do Consumidor | Plataforma Web | SE | SP | M | entre 31 a 40 anos | 1 | 1.0 | Air China | Transportes | Aéreo | Atendimento / SAC | Falta de atendimento prioritário | Não comprei / contratei | S | S | Finalizada avaliada | Não Resolvida | 3.0 | N |
| 2 | Secretaria Nacional do Consumidor | Plataforma Web | NE | RN | M | entre 31 a 40 anos | 1 | 9.0 | Gol Linhas Aéreas | Transportes | Aéreo | Vício de Qualidade | Negativa de embarque de passageiro (preterição... | Internet | S | S | Finalizada não avaliada | Não Avaliada | NaN | N |
| 3 | Instituto Municipal de Proteção e Defesa do Co... | Plataforma Web | SE | RJ | M | entre 31 a 40 anos | 1 | 9.0 | Gol Linhas Aéreas | Transportes | Aéreo | Vício de Qualidade | Negativa de embarque de passageiro (preterição... | Internet | N | S | Finalizada avaliada | Resolvida | 4.0 | N |
| 4 | Superintendência de Proteção e Defesa do Consu... | Plataforma Web | CO | GO | F | entre 21 a 30 anos | 1 | 1.0 | Azul Linhas Aéreas | Transportes | Aéreo | Cobrança / Contestação | Cobrança indevida / abusiva para alterar ou ca... | Internet | S | S | Finalizada avaliada | Resolvida | 5.0 | N |
canal_origem_v1 = pd.DataFrame(data_anac_v1['CanalDeOrigem'].value_counts(normalize=True))*100
canal_origem_v1['TOTAL (%)'] = canal_origem_v1
canal_origem_v1 = canal_origem_v1.iloc[:, [1]]
canal_origem_v1.head()
| TOTAL (%) | |
|---|---|
| Plataforma Web | 97.342879 |
| Plataforma IOS | 1.451891 |
| Plataforma Android | 1.205230 |
sns.catplot(x="CanalDeOrigem", kind="count", palette="ch:.25", data= data_anac_v1,
height=5, aspect=11.7/8.27)
plt.title(" Canal de Origem da Reclamação")
Text(0.5, 1.0, ' Canal de Origem da Reclamação')
regiao_v1 = pd.DataFrame(data_anac_v1['Região'].value_counts(normalize=True))*100
regiao_v1['TOTAL (%)'] = regiao_v1
regiao_v1 = regiao_v1.iloc[:, [1]]
regiao_v1.head()
| TOTAL (%) | |
|---|---|
| SE | 48.313480 |
| S | 16.057033 |
| NE | 15.990855 |
| CO | 14.863835 |
| N | 4.774796 |
sns.catplot(x="Região", kind="count", palette="ch:.25", data= data_anac_v1,
height=5, aspect=11.7/8.27)
plt.title(" Número de Reclamações por Região")
Text(0.5, 1.0, ' Número de Reclamações por Região')
estados_v1 = pd.DataFrame(data_anac_v1['UF'].value_counts(normalize=True))*100
estados_v1['TOTAL (%)'] = estados_v1
estados_v1 = estados_v1.iloc[:, [1]]
estados_v1.head()
| TOTAL (%) | |
|---|---|
| SP | 26.952232 |
| MG | 9.521518 |
| RJ | 9.246781 |
| DF | 8.998115 |
| PR | 6.653832 |
df1 = estados_v1['TOTAL (%)']
dic = {"SP": 26.952232,
"MG" : 9.521518,
"RJ" : 9.246781,
"DF" : 8.998115,
"PR" : 6.653832,
"RS" : 4.806882,
"SC" : 4.596318,
"BA" : 4.528135,
"CE" : 3.627722,
"GO" : 2.925841,
"ES" : 2.592949,
"PE" : 2.472627,
"MT" : 1.748686,
"PA" : 1.656439,
"MS" : 1.191192,
"MA" : 1.131031,
"AM" : 1.125015,
"PB" : 1.044800,
"RN" : 0.934504,
"RO" : 0.848273,
"PI" : 0.788112,
"AL" : 0.770064,
"SE" : 0.693860,
"TO" : 0.453215,
"AC" : 0.256688,
"RR" : 0.244656,
"AP" : 0.190511
}
estados_v2 = pd.DataFrame(list(dic.items()), columns=['ESTADOS', 'PERCENTUAL'])
estados_v2.head()
| ESTADOS | PERCENTUAL | |
|---|---|---|
| 0 | SP | 26.952232 |
| 1 | MG | 9.521518 |
| 2 | RJ | 9.246781 |
| 3 | DF | 8.998115 |
| 4 | PR | 6.653832 |
br_estados = 'br_states.json'
geo_json_data = json.load(open(br_estados))
mapa = folium.Map(
width=600, height=400,
location=[-15.77972, -47.92972],
zoom_start=3
)
folium.Choropleth(
geo_data=br_estados,
name='choropleth',
data=estados_v2,
columns=['ESTADOS', 'PERCENTUAL'],
key_on='feature.id',
fill_color='YlOrRd',
fill_opacity=0.9,
line_opacity=0.2,
legend_name='Taxa de Reclamação (%)'
).add_to(mapa)
# Visualizar
mapa